package com.fengxu.nio;

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

// MappedByteBuffer可以让文件(堆外内存)直接在内存中进行修改
public class TestMappedByteBuffer {

    public static void main(String[] args) throws Exception{
        String file = TestMappedByteBuffer.class.getResource("/1.txt").getFile();
        // 指定=以读写的方式使用文件(RandomAccessFile是java提供的一个可直接操作文件的类，支持对文件的读写和随机访问)
        RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw");
        FileChannel fileChannel = randomAccessFile.getChannel();
        /**
         * 参数一：指定什么模式: 读,写,读和写
         * 参数二: 映射文件的起始位置
         * 参数三: 映射到内存中的大小，也是可修改的数量
         */
        MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 1, 10);
        mappedByteBuffer.put(0,(byte) 'H');
        mappedByteBuffer.put(3,(byte) 'F');

        //关闭随机流
        randomAccessFile.close();
    }
}
